import { LOGIN_PATH } from '@vben/constants';
import { resetAllStores, useAccessStore, useUserStore } from '@vben/stores';

import { message } from 'ant-design-vue';
import { defineStore } from 'pinia';

import {
  getCaptchaImage,
  getUserInfoApi,
  getUserRoutersApi,
  logoutApi,
  userLogin,
} from '#/api';
import { router } from '#/router';

// export const useAuthStore = defineStore('auth', () => {
//   const accessStore = useAccessStore();
//   const userStore = useUserStore();
//   const router = useRouter();

//   const loginLoading = ref(false);

//   /**
//    * 异步处理登录操作
//    * Asynchronously handle the login process
//    * @param params 登录表单数据
//    */
//   async function authLogin(
//     params: Recordable<any>,
//     onSuccess?: () => Promise<void> | void,
//   ) {
//     // 异步处理用户登录操作并获取 accessToken
//     let userInfo: null | UserInfo = null;
//     try {
//       loginLoading.value = true;
//       const { data: { token: accessToken } } = await userLogin(params);

//       // 如果成功获取到 accessToken
//       if (accessToken) {
//         accessStore.setAccessToken(accessToken);

//         // 获取用户信息并存储到 accessStore 中
//         const [fetchUserInfoResult, accessCodes] = await Promise.all([
//           fetchUserInfo(),
//           getAccessCodesApi(),
//         ]);

//         userInfo = fetchUserInfoResult;

//         userStore.setUserInfo(userInfo);
//         accessStore.setAccessCodes(accessCodes);

//         if (accessStore.loginExpired) {
//           accessStore.setLoginExpired(false);
//         } else {
//           onSuccess
//             ? await onSuccess?.()
//             : await router.push(userInfo.homePath || DEFAULT_HOME_PATH);
//         }

//         if (userInfo?.realName) {
//           notification.success({
//             description: `${$t('authentication.loginSuccessDesc')}:${userInfo?.realName}`,
//             duration: 3,
//             message: $t('authentication.loginSuccess'),
//           });
//         }
//       }
//     } finally {
//       loginLoading.value = false;
//     }

//     return {
//       userInfo,
//     };
//   }

//   async function logout(redirect: boolean = true) {
//     try {
//       await logoutApi();
//     } catch {
//       // 不做任何处理
//     }
//     resetAllStores();
//     accessStore.setLoginExpired(false);

//     // 回登录页带上当前路由地址
//     await router.replace({
//       path: LOGIN_PATH,
//       query: redirect
//         ? {
//             redirect: encodeURIComponent(router.currentRoute.value.fullPath),
//           }
//         : {},
//     });
//   }

//   async function fetchUserInfo() {
//     let userInfo: null | UserInfo = null;
//     userInfo = await getUserInfoApi();
//     userStore.setUserInfo(userInfo);
//     return userInfo;
//   }

//   function $reset() {
//     loginLoading.value = false;
//   }

//   return {
//     $reset,
//     authLogin,
//     fetchUserInfo,
//     loginLoading,
//     logout,
//   };
// });

//   const userStore = useUserStore();
//   const router = useRouter();

export const useAuthStore = defineStore('auth', {
  state: () => ({
    loginLoading: false,
    captchaImage: '',
    captcha: {
      img: '',
      uuid: '',
    },
  }),
  actions: {
    async refreshCaptchaImage() {
      const {
        data: { img, uuid },
      } = await getCaptchaImage();
      this.captcha.img = `data:image/png;base64,${img}`;
      this.captcha.uuid = uuid;
    },

    async authLogin(params: Parameters<typeof userLogin>[0]) {
      this.loginLoading = true;
      const {
        data: { token, code, msg },
      } = await userLogin(params);
      if (code === 200) {
        const accessStore = useAccessStore();
        const userStore = useUserStore();
        message.success('恭喜你，登录成功');
        accessStore.setAccessToken(token);
        // 获取用户信息
        const [data1] = await Promise.all([
          getUserInfoApi(),
          getUserRoutersApi(),
        ]);
        // 获取用户路由列表
        userStore.setUserRoles(data1.roles);
        router.replace('/analytics');
      }
      if (code === 500) {
        message.error(msg);
        this.refreshCaptchaImage();
      }
    },
    async logout(redirect: boolean = true) {
      const accessStore = useAccessStore();
      try {
        await logoutApi();
      } catch {
        // 不做任何处理
      }
      resetAllStores();
      accessStore.setLoginExpired(false);
      // 回登录页带上当前路由地址
      await router.replace({
        path: LOGIN_PATH,
        query: redirect
          ? {
              redirect: encodeURIComponent(router.currentRoute.value.fullPath),
            }
          : {},
      });
    },
    $reset() {},
  },
});
